package com.example.mysql.学习笔记.基础.存储过程与函数;

public class 优缺点 {
}
/**
 * 关于存储过程使用的争议
 *
 * 尽管存储过程有诸多优点，但是对于存储过程的使用，**一直都存在着很多争议**，
 *      比如有些公司对于大型项目要求使用存储过程，
 *      而有些公司在手册中明确禁止使用存储过程，
 *      为什么这些公司对存储过程的使用需求差别这么大呢？
 *
 * ###  优点
 *
 * **1、存储过程可以一次编译多次使用。**
 *      存储过程只在创建时进行编译，之后的使用都不需要重新编译，
 *      这就提升了 SQL 的执行效率。
 * **2、可以减少开发工作量。**
 *      将代码`封装`成模块，实际上是编程的核心思想之一，
 *      这样可以把复杂的问题拆解成不同的模块，然后模块之间可以`重复使用`，
 *      在减少开发工作量的同时，还能保证代码的结构清晰。
 * **3、存储过程的安全性强。**
 *      我们在设定存储过程的时候可以`设置对用户的使用权限`，
 *      这样就和视图一样具有较强的安全性。
 * **4、可以减少网络传输量。**
 *      因为代码封装到存储过程中，
 *      每次使用只需要调用存储过程即可，这样就减少了网络传输量。
 * **5、良好的封装性。**
 *      在进行相对复杂的数据库操作时，原本需要使用一条一条的 SQL 语句，
 *      可能要连接多次数据库才能完成的操作，
 *      现在变成了一次存储过程，只需要`连接一次即可`。
 * ###  缺点
 *
 * 基于上面这些优点，不少大公司都要求大型项目使用存储过程，
 * 比如微软、IBM 等公司。但是国内的阿里并不推荐开发人员使用存储过程，这是为什么呢？
 *
 * > #### 阿里开发规范
 * > 【强制】禁止使用存储过程，存储过程难以调试和扩展，更没有移植性。
 *
 * 存储过程虽然有诸如上面的好处，但缺点也是很明显的。
 *
 * **1、可移植性差。**
 *      存储过程不能跨数据库移植，
 *      比如在 MySQL、Oracle 和 SQL Server 里编写的存储过程，
 *      在换成其他数据库时都需要重新编写。
 * **2、调试困难。**
 *      只有少数 DBMS 支持存储过程的调试。
 *      对于复杂的存储过程来说，开发和维护都不容易。
 *      虽然也有一些第三方工具可以对存储过程进行调试，但要收费。
 * **3、存储过程的版本管理很困难。**
 *      比如数据表索引发生变化了，可能会导致存储过程失效。
 *      我们在开发软件的时候往往需要进行版本管理，
 *      但是存储过程本身没有版本控制，版本迭代更新的时候很麻烦。
 * **4、它不适合高并发的场景。**
 *      高并发的场景需要减少数据库的压力，有时数据库会采用分库分表的方式，
 *      而且对可扩展性要求很高，
 *      在这种情况下，存储过程会变得难以维护，`增加数据库的压力`，显然就不适用了。
 * 小结：
 *      存储过程既方便，又有局限性。
 *      尽管不同的公司对存储过程的态度不一，但是对于我们开发人员来说，
 *      不论怎样，掌握存储过程都是必备的技能之一。
 */